package com.ruoyi.common.utils;


import com.ruoyi.common.utils.baidu.BaiduTransUtil;
import com.ruoyi.common.utils.youdao.TranslateUtil;
import lombok.SneakyThrows;
import org.apache.commons.io.FileUtils;
import org.apache.commons.io.FilenameUtils;
import org.noear.snack.ONode;

import java.io.File;
import java.io.IOException;
import java.security.NoSuchAlgorithmException;
import java.util.List;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.function.Supplier;

public class PictureAnalysisUtil {

    /**
     *
     * @param localPathList 路径 集合
     * @param description 描述
     * @param type 类型  1 线上图片解析 2 本地上传图片解析  3 线上视频解析 4 本地上传视频解析
     * @throws Exception
     */
    public static void analysis(List<String> localPathList, String description,Integer type) throws Exception {
        ExecutorService executor =  Executors.newFixedThreadPool(40);
         for(String localPath:localPathList){
             //创建一个不带返回值得任务。
             CompletableFuture<Void> f1 = CompletableFuture.runAsync(new Runnable() {
                 @SneakyThrows
                 @Override
                 public void run() {
                     String result=  QwUtil.conversationCall(localPath,description,type);
                     ONode oNode = ONode.load(result);
                     ONode node = oNode.select("$.output.choices[0].message.content[0].text");
                     String path = FilenameUtils.getFullPath(localPath)+FilenameUtils.getBaseName(localPath)+".txt";
                     File file = new File(path);
                     String str = node.getString();
                      String  zhAnalysisTrans = str.substring(str.indexOf("中文描述：")+5);
                    // String trans = TranslateUtil.translate(zhAnalysisTrans);
                     int keywordIndex = str.indexOf("中文描述");
                     String tag = str.substring(0, keywordIndex);
                     String des = tag+ System.lineSeparator()+"中文描述："+System.lineSeparator()+zhAnalysisTrans+ System.lineSeparator() +"英文描述："+ System.lineSeparator();
                     FileUtils.writeStringToFile(file, des, "UTF-8");
                     //tokens 计算
                     Integer input_tokens =  oNode.select("$.usage.input_tokens").getInt();
                     Integer output_tokens =  oNode.select("$.usage.output_tokens").getInt();
                     Integer onceTokens = input_tokens+output_tokens;
                     System.out.println("一次解析消耗总token:"+onceTokens);
                 }
             },executor);


         }
     }

    public static void main(String[] args) throws IOException, NoSuchAlgorithmException {


//        String jsonStr = "{\"requestId\":\"1275c6b0-42a2-971a-a3fd-7e8965550836\",\"usage\":{\"input_tokens\":1277,\"output_tokens\":81},\"output\":{\"choices\":[{\"finish_reason\":\"stop\",\"message\":{\"role\":\"assistant\",\"content\":[{\"text\":\"这张图片显示了一位女士和她的狗在海滩上。她们似乎正在享受彼此的陪伴，狗狗坐在沙滩上伸出爪子与女士握手或互动。背景是美丽的日落景色，海浪轻轻拍打着海岸线。\\n\\n请注意，我提供的描述基于图像中可见的内容，并不包括任何超出视觉信息之外的信息。如果您需要更多关于这个场景的具体细节，请告诉我！\"}]}}]}}";
//        ONode oNode = ONode.load(jsonStr);
//
//        Integer input_tokens =  oNode.select("$.usage.input_tokens").getInt();
//        Integer output_tokens =  oNode.select("$.usage.output_tokens").getInt();
//        Integer onceTokens = input_tokens+output_tokens;
//        System.out.println(onceTokens);
        String str = "标签：白种青年男性。\n" +
                "中文描述：这张照片是正面拍摄采用正常光手法的照片，人物为白种青年男性，留有胡须，面带微笑，露出牙齿，眼睛微眯。他戴着一顶灰色的针织帽，穿着一件黑色的T恤，T恤上印有“PORTISHEAD”的字样。";
        String  zhAnalysisTrans = str.substring(str.indexOf("中文描述：")+5);
        String trans = TranslateUtil.translate(zhAnalysisTrans);
        int keywordIndex = str.indexOf("中文描述");
        String tag = str.substring(0, keywordIndex);
        String des = tag+ System.lineSeparator()+"中文描述："+System.lineSeparator()+zhAnalysisTrans+ System.lineSeparator() +"英文描述："+ System.lineSeparator()+trans;
        System.out.println(des);
    }
}
